package ar.edu.utn.frgp.banco.servlets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import ar.edu.utn.frgp.banco.domain.Cliente;
import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.PlazoFijo;
import ar.edu.utn.frgp.banco.domain.Movimientos;
import ar.edu.utn.frgp.banco.service.RecursoServiceCuenta;
import ar.edu.utn.frgp.banco.service.RecursoServicePlazoFijo;
import ar.edu.utn.frgp.banco.service.RecursoServiceMovimientos;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceCuentaImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServicePlazoFijoImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceMovimientosImpl;
import ar.edu.utn.frgp.banco.servlets.scope.CuentaBean;
import ar.edu.utn.frgp.banco.servlets.scope.MessageBean;

public class AltaPlazoFijoServlet extends GenericServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public AltaPlazoFijoServlet() {
        // TODO Auto-generated constructor stub
    }
	
	public void realizarAccion(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		
		int interes;
		
		Cuenta cuorigen = new Cuenta ();
		Cuenta cudestino = new Cuenta ();
 		PlazoFijo regPlazoFijo = new PlazoFijo();
 		Movimientos regMovimiento = new Movimientos();	
 		 		
		RecursoServiceCuenta serviceCuenta = new RecursoServiceCuentaImpl();
		RecursoServicePlazoFijo servicePlazoFijo = new RecursoServicePlazoFijoImpl();
		RecursoServiceMovimientos serviceMovimientos = new RecursoServiceMovimientosImpl();
		//////
		Cliente elCliente = (Cliente)req.getSession().getAttribute("cliente");
		
		String montodelplazo = (String)req.getParameter("monto");
		String origendelplazo = (String)req.getParameter("origen");
		String cuentaorigendelplazo = (String)req.getParameter("nrocuentaorigen");
		String acreditaciondelplazo = (String)req.getParameter("acreditacion");
		String cuentadestinodelplazo = (String)req.getParameter("nrocuentadestino");
		String tiempodelplazo = (String)req.getParameter("tiempo");
		
 		///////
		int  dniCliente= elCliente.getDni();
		int origen=Integer.parseInt(origendelplazo);
		int acreditacion=Integer.parseInt(acreditaciondelplazo);
		int  cuentaClienteOrigen=Integer.parseInt(cuentaorigendelplazo);
		int  cuentaClienteDestino=Integer.parseInt(cuentadestinodelplazo);
		double  montoApertura=Double.parseDouble(montodelplazo);
		int dias=Integer.parseInt(tiempodelplazo);
		String jsp = "";
		////////////////////////////////////////////////////////////////////////
		
		if(dias < 30)
		{
			MessageBean bean = new MessageBean();
			bean.setMensaje("El tiempo minimo de un plazo es de 30 dias");
			req.setAttribute("msjBean", bean);
			jsp = "altaplazofijo.jsp";
			
			req.getSession().setAttribute("cliente", elCliente); // le mando todo lo que le mande la primera vez
			
			
			List<Cuenta> cuentas = new ArrayList<Cuenta>();		
			cuentas = serviceCuenta.listarCuentasActivas(elCliente.getDni());
			
			CuentaBean beancuenta = new CuentaBean();
	        beancuenta.setCuentas(cuentas);
			
			req.setAttribute("beancuenta", beancuenta);
		}
		else
		{
			if (dias >=90)
			{interes = 13;}
		else 
			{if (dias <=60)
			{interes = 10;}
			else
			{interes = 12;}
			}
		
		
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); //no se usa porque en el dao obtiene su fecha
		
		Calendar cal = Calendar.getInstance();
		Date fechaAlta = cal.getTime();
		
		cal.add(Calendar.DATE, dias);
		Date fechaVencimiento = cal.getTime();
		
		cuorigen = serviceCuenta.buscarCuenta(cuentaClienteOrigen); //busco y traigo la cuenta de la cual se va a debitar el monto
		cudestino = serviceCuenta.buscarCuenta(cuentaClienteDestino); //busco y traigo la cuenta de la cual se va a debitar el monto
							
		cuorigen.setSaldo(cuorigen.getSaldo()- montoApertura );// modifico el saldo de esa cuenta (saldo de la cuenta - monto fijo del servicio)
		serviceCuenta.modificarSaldoCuenta(cuorigen);/// le mando a modificar saldo cuenta la cuenta con el saldo modificado
		
		regPlazoFijo.cargarPlazoFijo(fechaAlta,fechaVencimiento,dniCliente,origen,cuorigen.getNrocuenta(),acreditacion,cudestino.getNrocuenta(),montoApertura,interes);
		servicePlazoFijo.crearPlazosFijos(regPlazoFijo);
							
		regMovimiento.cargarMovimiento(cuentaClienteOrigen, 1, 5, cuorigen.getSaldo(),montoApertura);
		serviceMovimientos.registrarMovimiento(regMovimiento);
		
		jsp = "menuplazofijo.jsp";
			
		}
		
		req.getRequestDispatcher(jsp).forward(req, resp);
		
		
	}
}
